enum Either[A, B] {
    Left(a: A);
    Right(b: B);

    public function isLeft() {
        match this {
            Left(_) => return true;
            default => return false;
        }
    }

    public function isRight() {
        match this {
            Left(_) => return false;
            default => return true;
        }
    }

    // public function unwrapLeft() {
    //     return match this {
    //         Left(l) => l;
    //         Right(_) => throw WrongValueError;
    //     }
    // }

    // public function unwrapRight() {
    //     return match this {
    //         Left(_) => throw WrongValueError;
    //         Right(r) => r;
    //     }
    // }
}
